{
 "cells": [
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_constraint_handling:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Constraint Handling"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Constraint handling is often neglected in frameworks but is indeed an essential aspect of optimization.\n",
    "Depending on the characteristics of the constraints, one method might be more suitable and lead to better results than another.\n",
    "In principle, two ways exist how constraints can be dealt with: a) use an algorithm that can handle constraints internally; b) redefine the problem to have no constraints but still guarantee the optimum to be a feasible solution. \n",
    "Both strategies will be elaborated in the following."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By default, the returned optimum is **always** required to be feasible. It might be required to obtain the **least infeasible** solution if no feasible could have been found in some situations. To enable this behavior, you can pass `return_least_infeasible=True` to the `minimize` function. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CV: 0.01707583254530075\n",
      "F: 5186.280990822757\n"
     ]
    }
   ],
   "source": [
    "from pymoo.algorithms.so_genetic_algorithm import GA\n",
    "from pymoo.factory import get_problem\n",
    "from pymoo.optimize import minimize\n",
    "\n",
    "res = minimize(get_problem(\"g05\"),\n",
    "               GA(),\n",
    "               return_least_infeasible=True,\n",
    "               seed=1,\n",
    "               verbose=False)\n",
    "\n",
    "print(\"CV:\", res.CV[0])\n",
    "print(\"F:\", res.F[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Inequality Constraints"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In pymoo, inequality constraints are always defined as \"$\\leq 0$\" constraints. Thus, constraint violation is defined as follows: A solution is considered as **feasible** of all constraint violations are **less than** zero. A solution is considered as **infeasible** if at least one constraint violation is **larger than** zero. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "- x^4 \\geq - 2\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Has to be converted to a \"$\\leq 0$\" constraints to satisfy the implementation of constraints in pymoo:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "x^4  \\leq 2\\\\\n",
    "x^4 - 2 \\leq 0\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let us assume the whole optimization problem is then given by:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\\begin{align} \n",
    "\\begin{split}\n",
    "\\min \\;\\; & f(x) = 1 + x^3 \\\\ \n",
    "\\text{s.t.} \\;\\; & x^4 - 2\\leq 0\\\\\n",
    "& -2 \\leq x \\leq 2\n",
    "\\end{split}\n",
    "\\end{align}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The figure below shows the corresponding function and the optimum to be found. The constraint function is shown with a dashed line greater than zero (violated) and with a solid line where less or equal to zero (satisfied). The optimum is shown by a red cross, which is minimum in the feasible region."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "nbsphinx": "hide_input"
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9wAAALDCAYAAADnpwjnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3wUdeL/8ffshhQSeklIaKEjPaEpIDZOkQ4eSEfkUMTTE8U78Yv3Ow8RToQD77CjdBtNQEFBQT1QJJEqJEhvoYckJCHJ7vz+CIksBAhkdyfZvJ6PB491Pjs7804kZN87M58xTNMUAAAAAABwL5vVAQAAAAAA8EUUbgAAAAAAPIDCDQAAAACAB1C4AQAAAADwAAo3AAAAAAAeQOEGAAAAAMADKNwAAAAAAHgAhRsAAAAAAA+gcAMAAAAA4AEUbgAAAAAAPIDCDQAAAACAB1C4AQAAAADwAD+rAwDFTUxMTJCkhyXdJ6mWpBLWJgIAACiSMiXtk7RG0kfR0dFpFucBrmKYpml1BqDYuFS2p9vt9o52u728zWYLkmRYnQsAAKAIMp1OZ5rD4TjrcDjWS3qa0o3ChiPcgHc9bLfbOwYFBYWGhYUlhISEpNrtdqfVoQAAAIoah8NhS0lJKZmQkBCWlpbW0eFwPCzpA6tzAZfjGm7Au+6z2+3lw8LCEsqUKZNC2QYAALg1drvdWaZMmZTQ0NATdru9vLIv1wMKFQo34F21bDZbUEhISKrVQQAAAHxBqVKlLly6TC/S6izAlSjcgHeVkGRwZBsAAMA9bDabU9lz4vhbnQW4EoUbAAAAQJFlGMw/i8KLwg0AAAAAgAdQuAEAAAAA8AAKNwAAAAAAHkDhBgAAAADAAyjcAAAAl7zwwgthhmFEDxkypLrVWQAARR+FGwCQL6+++mqlevXq3RYSEtIiJCSkRfPmzRt89NFHZazOBbjL2rVrg+fMmVOpXr16aVZnKbYSEuyaMqWiEhLsblkPACxG4QYA5Eu1atUyJ0yYcOTHH3/8dcOGDb926NAhedCgQbV/+umnIKuzwT169+5ds3z58s2SkpJu+f3B999/X9IwjOipU6dWdGc2Tztz5ox92LBhkW+99daBMmXKOKzOUywdPeqn9u0baOzYGmrfvoGOHvUr0HoAUAhQuAFY7uzZs7Zhw4ZVi4iIaFKiRIkowzCix40bFyYVvAAU1Tf/hdGgQYMS+/btm9S4ceOLTZs2vfjGG28cDQ4Odn733XfBVmdDwa1fv77k0qVLKzz11FMJpUuXdt7qdjp06JB63333Jb766qvh58+fLzLvM4YMGVKja9eu57p165ZsVYaEhAT71KlTK3bq1Kl29erVGwcGBkaVKlWqeXR0dP1p06ZVdDh8+HOAo0f91LFjfe3dGyhJ2rs3UB071r+qTOd3PS9LSEiwjxkzJrxRo0YNS5Uq1TwgICAqIiKiSc+ePSO//PLLEHftZ8WKFaXGjBkTHhcX55/X8zNnziwfHBzcYubMmeXdtU8ABVNkfhEC8F0PPfRQrdmzZ1euW7du2qhRoxKeeeaZ43369El0RwEoLG/+P/jgg3JDhw6tFh0dXT8kJKSFYRjRPXr0iLQqT0FlZWXpnXfeKZeammrr2LHjBavzoODGjRsXERwc7HjuuedOumFbx0+fPl3i1VdfreyObJ72+uuvVzxw4EDAv//972NW5pgzZ075Z599tsbWrVuDmzdvfuHRRx898cADDyTGx8cHjRkzpkaXLl1qOZ23/FlI4XVlic5xZZnO73petmjRotL169dvsm7dutL/+Mc/ju7fv3/7uXPnflmyZMlvFSpUyOrWrVv9vn371rh48aJR0H198803paZNm1Zlz549AXk9f/ToUf/U1FTb0aNH8yzkALyPU3AAWOqXX34J/Pbbb8u0b98+ad26db9d/ly7du3quqMAjBs37vg999zT8NVXX608adKkhIIlvjWTJ0+uEhcXF1SyZElnaGhoxv79+wNv/KrCZ9OmTUF33XVXg4yMDFtQUJBj7ty5e1u3bs31rkXctm3bAjZu3Fi6X79+p0NCQsyCbu/uu+9OjYyMTJ8zZ06lV155JcFuL7yX2W7dujVgwoQJEevWrdsdEBBQ4K+9IBo0aJA+f/783/r163f+8u/ZoUOH/Nq0adNw9erV5ebMmVN22LBhiRbGdK9rlegcOWV64cK96t+/9g3XW78+ThERWZ6MfLnVq1eH9O/fv07btm2T165du6dEiRK5z7Vu3TqtdevWh5s1a5b69NNP13Q4HMaiRYsOeDLPK6+8kjBixIgzkZGRmZ7cD4D84wg3AEutXr26lCT17Nnz3OXjOQWga9eu5wpaAC5/82/VKZmvvfba4W3btu1ITk7+ZcaMGYfcsc0ZM2ZUMAwjesWKFaXcsb38aNq0afqmTZt+/fbbb3cNGTLk1KhRo2r+/PPPRfLDA1+XmppqjBs3Lqx27dqNAgICosLDw5v87W9/C8vKylJwcHCLevXq3Zaz7ltvvVXRNE09/PDDZ/PaVrt27eoahhH94Ycflr183Ol0qk+fPjUNw4h+4oknIi5/rlevXmePHz/uv3Tp0tKe+Qqv7Wbyrl+/PiQxMdEvOjq6sZ+fX7Sfn1/0zz//HDJv3rxKfn5+0WlpaQU+Kplf3bt3Tx4wYMD5Kz+gqF69etbQoUNPSdK3337rtZ93j0tIsF+3bOfYuzdQrVs3ytd6HTvW99ZEaunp6cbw4cMjnU6n8d577x28vGxf7qmnnjrTunXr5MWLF1dYuHChxyeapGwDhQuFG4AlPvzww7KGYUS/8MIL1SXpueeeq2EYRrRhGNGxsbGB1ysARe3NvyR169YtuUmTJhdttsLzz+6tfB8DAwPNxo0bX+zQoUPqf//736MNGzZMe+2110K9mxw3kpSUZLvjjjvqv/rqqxFBQUHO4cOHn7j99tuTp02bFv7QQw9Fpqam2ho3bpyas/53331X2m636+67787z8oApU6Ycsdls+uc//xmRlfX7wcPHHnus6uLFiyv079//9MyZM49e/poOHTqkSNLq1au9/jN3M3kHDBiQuGnTpp0bN27M/dOoUaPULl26nN24ceNOq4965yhRooQpSX5+PnRy4rx55W5Yom/W3r2Bmj+/nFu3eQ3vv/9+uWPHjvm3bNkyuV69ehnXW3fgwIFnJOnf//53qCTl/L4zDCN6zJgx4f/5z38qNGzY8LbAwMCosmXLNu/Zs2fkwYMHcxt8XFycv2EY0dOmTasiSd26dauX8/o+ffrUlKSIiIgmV45J0jvvvFPu8v1t37494IknnoioWLFis1KlSjW/9957a8fHx/tL2b+b69Sp0yggICCqXr16ty1atMjl57d169b189rHd999V/LyfVx+jfmAAQOq54xHREQ0OXz4sF/nzp1rhYSEtKhQoUKzYcOGVUtLSzOcTqeeffbZKpUrV24aGBgYdccdd9TduXNnnqfOA0WJD/2rDRRthqFoqzPcDNNUTEFeHxERkfnMM88c//DDDyslJSXZn3rqqQRJMgzDbNq0afr1CsCUKVOOtG/f/rZ//vOfEYMGDUrMeQN6ozf/U6dO1erVq0v36dMnqSDZfcWtfB+v5HQ6dfHixcLzKcJ1GP8wXH7GzL+bef4dnrJhSsWxX4+tkbP8cKOHTy98aOHBvNZtNLNRw19P/VoyZ/m7Yd/t6lCjQ+qV631/8PuSd354Z8Oc5dsq3Za684mdu27l68iPwYMH19i6dWvwc889d2zy5MnHcz7oWbZs2ZmePXvWk6QWLVqkStnlfPfu3SVr1aqVdq25Em6//fa0nj17nlm8eHGFmTNnVnjqqafO/O1vfwt77733Qh988MFzc+fOver706FD9vdh48aNNzwi+/LLL1dOTEzM93uSFi1apA4ePPiap1XfTN6KFSs6Klas6HLqS8mSJZ3lypVztGrVKj2/mTwpMzNTH3/8cQVJevDBB89bncdtBg06p7feCnVr6a5dO10DB5678YoFt2rVqjKSFBUVdcN5LNq3b39BkmJjY0OSkpJspmnGrFixolS3bt3qLVmypFzNmjUvLlq06LeaNWtmLlq0qMyoUaMi27VrF7J58+Zfw8LCHPXr188wTTNmzJgx4dOmTauyfPny+K5du7pM8Hf06NHtcXFx/g0aNGhy+fjIkSPPjRw5MqZPnz41Fy9eXOEvf/lL1T/+8Y/nJkyYsH3jxo0lBwwYUKdLly51J02adDgmJiZ4/fr1cWfPnrX369ev1sCBA+s0b958e+3atTMladOmTXF57ePOO+9MNU0zdx+XP7dgwYJDCxYsOBQREdEkMzPTGDp0aM1x48Ydnz9//oH333+//PPPP1/D4XAY4eHhGXXr1r24e/fuHRs2bAgeMGBA7V69etWOj4//9db+DwGFA4UbgCU6dep04e67777w5ptvhtaqVSt96tSpuZMV3agAFLU3/4XVzX4fn3jiiYju3bufj4yMzDh//rx99uzZ5Tdt2lTqo48+2mPV14CrrV27Nvjzzz8vf++99ya+9tprxy9/rkePHslVqlTJOH78uH+rVq1SJenAgQMlHA6HKlWqdN3TUCdPnnx05cqV5SdPnhyekpJimzx5ckT79u2TFi1atD+va7QrVKjgCAgIMI8fP37DyZvefvvt0GPHjuV7kqfevXufudHP3M3mLcxGjx5ddc+ePUEdO3Y871MfGIaFObR+fVy+TivPj9q107V+fZzCwrxy7VDOXBxVq1a97tFtSYqMjMyQpKysLCMuLs7/8g9zTp486b958+bdFSpUcEjS4MGDEw8fPnzkxRdfrP7cc89FzJs3zy2XIeWoXbv2xccff/ysJHXp0iWlV69eZ2bPnl359ddfD92wYcMeSYqIiMgaO3ZswvDhw2stWLCg3Pjx4ws8maIknTp1qsSf/vSnU/fdd98FSRo7duzpd999t/Jnn31WYcSIESdzcnXt2jW5Z8+eZ+fOnVtp48aNQbfffjtzhaDIonADsExsbGxQenq6rUmTJi5HBPNTAIram//C6ma+jydOnCgxfPjwyNOnT5cICQlxNGjQIO3TTz/d41MFwAe88cYblSVp/Pjxx/N6vmzZslkJCQn+bdq0SZWkkydP+l0av25JqVOnTuajjz56YubMmWEvvvhi9RYtWlz44osv9gYGBl7zlOvSpUtnnT17Nu8LWy9z9OjR7Tda52bdSt4cmzZtisvPPiIiIprczL8V3bt3P7ts2bL9+V1fkiZMmFD53XffDY2MjEz/+OOPb+q1RUJERJZbSndO2fbihGnJycl2SQoKCrrh36lSpUrlfnicmJjo8o9rx44dz+eU7RzDhg079+KLL1ZftmxZeYfDccidHxJ169bN5SyJunXrXpSkNm3auBypv+2229IlKT4+3m1nINhsNj300EMu+4+MjLy4Z8+eoD/84Q8uv0vq1auXLkm7du0KpHCjKKNwA7DMTz/9VFL6/dTWHPkpAEXtzX9BXe+Nfbdu3epdOda7d+8z+ZkN92a+j56eXRfu8f3335cuW7ZsVs5ZHVc6depUierVq18sV66cU8o+fVrKngDqRtuuVKlSbpl5//33D1xeIvJy8eJFW0BAgGX3sbrZvDerevXqF/39/fO9zSpVqtzUZFYTJ06sNH78+Gq1a9dO/+abb+JCQ0N980bcBS3dFpRtSSpVqpRDkvIzsV5ycnLupTfly5d3+f+Y1xHy8PDwrNKlSzuSkpLsu3btCmjcuPFFd2S+tD+Xv4c5X8eVfz9zfgenpaW57bKhcuXKZV05uVxISIgjr1ylS5d2SNKFCxeKxGVLwLVQuIFCoqDXRBdFsbGxJSWpZcuWLsUgvwWgqL35L4jHHnvsxJWnuW/bti1o7dq1ZXv37n2mRo0aLm/YrvwQ43o8XUoKi2tds32l5+547vRzdzx3Oj/r5vc67A41OqTmd/8FkZqaapw9e9avQYMGaXlN0PfLL78Enj59ukTbtm1zJyMMDw/PkqQbXUbx1ltvlX/55ZerVqxYMfP06dMlpkyZUnn+/PnXPNXV4XAoOTnZHhERccOi4InLOG42763YuHFjvDu3d7mXX3658t///vdqdevWTfv222/jI7xcJr0uIiJLCxfuVevWjW76tQsX7vV22ZakyMjI9J07d5Y8cuTIDc9y2L9/v78k+fv7m1dOsBYSEpLnv7lBQUHOpKQk+7lz59x6DUTO79grBQYG5jlumu6bN/B6v4Ovlcud+wesQOEGYJlt27aVNAxDOae25shPAShqb/4L6qWXXrrq+rkZM2ZUWLt2bdlHHnnkzJWT5+SXN0oJvMdut8tutyspKSnPN+gTJ04Mk6TmzZvn/sxVr149s1y5cln79u275pHFjz/+uMyf//znmnXq1Elbt25dfLt27ep//PHHFZ9//vkTzZo1y/NnauvWrYGmaeq222674amg7r6M41byFiYvvvhi2MSJEyMaNGiQ9s0338RXqVLFt8u2lH0/7v79a9/Sa/v3r23FEe4HHnjg/IoVK8rHxsYG32jdH374IViSWrdunXzlh5opKSl5HsHNObJcrly5QnVmg2Fc+7Nwdx4NB3wFhRuAJZxOp+Li4kpefmprjhsVgKL25r+wKuqlBFcLCAgwa9asmb53797AZcuWlerRo0fuBzGvvvpqpc8++6yC5HpWic1mU+vWrZNXr15dbseOHVedurp69eqQYcOG1QoNDc38+uuv94SHh2e99NJLx4YPH17r2WefrbpmzZq9eWX5/vvvgyWpY8eON7zG352Xcdxq3sJi7NixVaZMmRLeqFGj1LVr18b77Gnklzt61K9A13Dn3H/by6X70UcfPTdx4sSIzZs3l4qPj/e/3q3BFixYUEGSnn/++YQrn8vrCPnRo0f9kpKS7CEhIY6GDRvm/kwahmH54d7g4GCnJKWmpl5VrhMSEvL9uxMoLvgUCoAltm/fHnDhwgWXewHnyCkAiYmJfjt27HC5B+e13kw7HA7j2WefrXqt/d3sm3/TNGPy+6coXtt8q99HFH5jxow5Lkl9+/at27t375qjRo2KiIqKavDaa6+FR0ZGphuGoTvuuMPl565Xr16JkrR8+XKXe+5u2LAh6KGHHqoTEhLiWL16dXyNGjUyJemRRx45d6kQll21alVIXjnWrFlT2m63q2/fvl77MKog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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 353,
       "width": 494
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rc('font', family='serif')\n",
    "\n",
    "X = np.linspace(-2, 2, 10000)\n",
    "\n",
    "F = 1 + X ** 3\n",
    "G = X**4 - 2\n",
    "\n",
    "\n",
    "plt.figure(figsize=(7, 5))\n",
    "\n",
    "plt.plot(X, F, linewidth=2.0, color=\"blue\", label=\"$f(x) = 1 + x^3$\")\n",
    "\n",
    "I = G<=0\n",
    "plt.plot(X[I], G[I], linewidth=4.0, color=\"green\")\n",
    "plt.plot(X, G, linewidth=2.0, color=\"green\", label=\"$g(x) = x^4 - 2$\", linestyle='dotted')\n",
    "\n",
    "\n",
    "\n",
    "plt.scatter([-1.18920654], [-0.6817904], color=\"red\", s=100, marker=\"X\", label=\"Optimum\")\n",
    "plt.xlim(-2, 2)\n",
    "plt.xlabel(\"$x$\")\n",
    "plt.ylabel(\"$f$\")\n",
    "\n",
    "plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.12),\n",
    "          ncol=4, fancybox=True, shadow=False)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The problem can be implemented straightforwardly:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from pymoo.util.misc import stack\n",
    "from pymoo.model.problem import Problem\n",
    "\n",
    "class MyProblem(Problem):\n",
    "\n",
    "    def __init__(self):\n",
    "        super().__init__(n_var=1,\n",
    "                         n_obj=1,\n",
    "                         n_constr=1,\n",
    "                         xl=-2,\n",
    "                         xu=2)\n",
    "\n",
    "    def _evaluate(self, X, out, *args, **kwargs):\n",
    "        out[\"F\"] = 1 + X ** 3\n",
    "        out[\"G\"] = X**4 - 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And then being solved as usually by initiating the problem, algorithm and running the minimize method:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best solution found: \n",
      "X = [-1.18920654]\n",
      "F = [-0.6817904]\n",
      "CV = [0.]\n"
     ]
    }
   ],
   "source": [
    "from pymoo.algorithms.so_pso import PSO\n",
    "from pymoo.optimize import minimize\n",
    "\n",
    "problem = MyProblem()\n",
    "\n",
    "algorithm = PSO()\n",
    "\n",
    "res = minimize(problem,\n",
    "               algorithm,\n",
    "               seed=1,\n",
    "               verbose=False)\n",
    "\n",
    "print(\"Best solution found: \\nX = %s\\nF = %s\\nCV = %s\" % (res.X, res.F, res.CV))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For a bi-objective example with constraints, we like to refer to our [Getting Started Guide](../getting_started.ipynb) where a similar example is shown."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Equality to Inequality Constraints"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We got a couple of questions about how equality constraints should be handled in a genetic algorithm. In general, functions without any smoothness are challenging to handle for genetic algorithms. An equality constraint is an extreme case, where the constraint violation is 0 at precisely one point and otherwise 1. \n",
    "\n",
    "Let us consider the following constraint $g(x)$ where $x$ represents a variable:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$g(x): x = 5$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "An equality constraint can be expressed by an inequality constraint:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$g(x): |x - 5| \\leq 0$   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "or"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$g(x): (x-5)^2   \\leq 0$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "However, all of the constraints above are very strict and make **most search space infeasible**. Without providing more information to the algorithm, those constraints are challenging to satisfy."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Thus, the constraint can be smoothed by adding an epsilon to it and, therefore, having two inequality constraints:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$g'(x): 5 - \\epsilon \\leq x \\leq 5 + \\epsilon$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Also, it can be simply expressed in one inequality constraint by:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$g'(x): (x-5)^2  - \\hat{\\epsilon} \\leq 0$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Depending on the $\\epsilon$, the solutions will be more or less close to the desired value. However, the genetic algorithm does not know anything about the problem itself, making it challenging to handle and focus the search in the infeasible space."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Parameter-less Approach / Feasibility First"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Parameter-less constraint handling is the default constraint handling approach in **pymoo**. It strictly prefers feasible over infeasible solutions. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "F(x)=\n",
    "\\begin{cases}\n",
    "f(x), \\quad \\text{if feasible} \\\\\n",
    "f_{\\max} + \\sum_{j=1}^{|J|} \\, \\langle \\, g_j (x) \\, \\rangle, \\quad \\rm{otherwise}\n",
    "\\end{cases}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "where $\\langle \\cdot \\rangle$ is defined by "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "\\langle a \\rangle = \n",
    "\\begin{cases}\n",
    "a, \\quad a \\geq 0 \\\\\n",
    "0, \\quad \\rm{otherwise}\n",
    "\\end{cases}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This approach works well if an algorithm is based on comparisons. For instance, a genetic algorithm has to determine what individuals survive. Thus, this mapping can be utilized to create a rank for each individual. \n",
    "If the $f_\\max$ of the function is known beforehand, it can also be used to redefine the problem beforehand. \n",
    "Redefining the problem is very similar to the approach discussed next."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Penalty-based Approach / Lagrange Multipliers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The penalty-based constraint handling approach internally converts equality constraints to inequality constraints. Then, the violation of inequality and equality constraints penalize the objective value. This makes all non-constrained algorithms applicable; however, it also might create a more difficult fitness landscape to solve. \n",
    "\n",
    "**NOTE**: Genetic algorithms are not made to handle equality constraints out of the box, but often need to be customized to satisfy the equality constraints directly. The approach below only works for a very simple and a very limited amount of equality constraints."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Single-objective"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\\begin{align} \n",
    "\\begin{split}\n",
    "\\min \\;\\; & f(x) = x_1^2 + x_2^2 + x_3^2 \\\\ \n",
    "\\text{s.t.} \\;\\; & x_1 \\cdot x_2 \\geq 1\\\\\n",
    "& x_1 \\cdot x_2 \\leq 5\\\\\n",
    "& x_2 + x_3 = 1\\\\\n",
    "& 0 \\leq x \\leq 5\n",
    "\\end{split}\n",
    "\\end{align}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By converting the constraints to $\\leq 0$ constraints the implementation of the problem looks as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def func_obj(x):\n",
    "    return x[0] ** 2 + x[1] ** 2 + x[2] ** 2\n",
    "\n",
    "constr_ieq = [\n",
    "    lambda x: 1 - x[0] * x[1],\n",
    "    lambda x: x[0] * x[1] - 5\n",
    "]\n",
    "\n",
    "constr_eq = [\n",
    "    lambda x: 1 - x[1] - x[2]\n",
    "]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For this example, we use the definition of a problem using the factory method `create_problem_from_funcs`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pymoo.model.problem import FunctionalProblem\n",
    "from pymoo.model.problem import ConstraintsAsPenaltyProblem\n",
    "\n",
    "problem = FunctionalProblem(3,\n",
    "                            func_obj,\n",
    "                            xl=0,\n",
    "                            xu=5,\n",
    "                            constr_ieq=constr_ieq,\n",
    "                            constr_eq=constr_eq\n",
    "                            )\n",
    "\n",
    "problem = ConstraintsAsPenaltyProblem(problem, penalty=1e6)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then, an algorithm can be used to solve the problem as usual:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best solution found: \n",
      "X = [1.25468499 0.79701394 0.20298647]\n",
      "F = [2.25066914]\n",
      "CV = [0.]\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from pymoo.algorithms.so_pso import PSO\n",
    "from pymoo.optimize import minimize\n",
    "\n",
    "\n",
    "algorithm = PSO(pop_size=50)\n",
    "\n",
    "res = minimize(problem, algorithm, seed=1)\n",
    "\n",
    "opt = res.opt[0]\n",
    "X, F, CV = opt.get(\"X\", \"__F__\", \"__CV__\")\n",
    "\n",
    "print(\"Best solution found: \\nX = %s\\nF = %s\\nCV = %s\\n\" % (X, F, CV))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Multi-objective"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The almost equivalent could be applied for multi-objective optimization problems. The example below shows the [getting started guide](../getting_started.ipynb) example with a penalty being used to deal with the constraints:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "objs = [\n",
    "    lambda x: x[0]**2 + x[1]**2,\n",
    "    lambda x: (x[0]-1)**2 + x[1]**2\n",
    "    \n",
    "]\n",
    "\n",
    "constr_ieq = [\n",
    "    lambda x: 2*(x[0]-0.1) * (x[0]-0.9) / 0.18,\n",
    "    lambda x: - 20*(x[0]-0.4) * (x[0]-0.6) / 4.8\n",
    "]\n",
    "\n",
    "constr_eq = []"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pymoo.model.problem import FunctionalProblem\n",
    "from pymoo.model.problem import ConstraintsAsPenaltyProblem\n",
    "\n",
    "problem = FunctionalProblem(2,\n",
    "                            objs,\n",
    "                            xl=-2,\n",
    "                            xu=2,\n",
    "                            constr_ieq=constr_ieq,\n",
    "                            constr_eq=constr_eq\n",
    "                            )\n",
    "\n",
    "problem = ConstraintsAsPenaltyProblem(problem, penalty=1e6)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Optimize"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pymoo.algorithms.nsga2 import NSGA2\n",
    "from pymoo.optimize import minimize\n",
    "\n",
    "algorithm = NSGA2(pop_size=40)\n",
    "\n",
    "res = minimize(problem,\n",
    "               algorithm,\n",
    "               seed=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Visualize"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pymoo.visualization.scatter.Scatter at 0x7fc8948eedd0>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 387,
       "width": 498
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.visualization.scatter import Scatter\n",
    "\n",
    "plot = Scatter(title = \"Objective Space\")\n",
    "plot.add(res.F)\n",
    "plot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Repair Operator "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A simple approach is to handle constraints through a repair function. This is only possible if the equation of the constraint is known. The repair makes sure every solution that is evaluated is, in fact, feasible. Let us consider the following example where \n",
    "the equality constraints need to consider more than one variable:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\\begin{align} \n",
    "\\begin{split}\n",
    "\\min \\;\\; & f_1(x) = (x_1^2 + x_2^2) \\\\ \n",
    "\\max \\;\\; & f_2(x) = -(x_1-1)^2 - x_2^2 \\\\[1mm]\n",
    "\\text{s.t.} \\;\\; & g_1(x_1, x_3) : x_1 + x_3 = 2\\\\[2mm]\n",
    "& -2 \\leq x_1 \\leq 2 \\\\\n",
    "& -2 \\leq x_2 \\leq 2 \\\\\n",
    "& -2 \\leq x_3 \\leq 2\n",
    "\\end{split}\n",
    "\\end{align}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We implement the problem using by squaring the term and using an $\\epsilon$ as we have explained above. The source code for the problem looks as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "from pymoo.model.problem import Problem\n",
    "\n",
    "\n",
    "class MyProblem(Problem):\n",
    "\n",
    "    def __init__(self):\n",
    "        super().__init__(n_var=3,\n",
    "                         n_obj=2,\n",
    "                         n_constr=1,\n",
    "                         xl=np.array([-2, -2, -2]),\n",
    "                         xu=np.array([2, 2, 2]))\n",
    "\n",
    "    def _evaluate(self, x, out, *args, **kwargs):\n",
    "        f1 = x[:, 0] ** 2 + x[:, 1] ** 2\n",
    "        f2 = (x[:, 0] - 1) ** 2 + x[:, 1] ** 2\n",
    "        g1 = (x[:, 0] + x[:, 2] - 2) ** 2 - 1e-5\n",
    "\n",
    "        out[\"F\"] = np.column_stack([f1, f2])\n",
    "        out[\"G\"] = g1\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As you might have noticed, the problem has similar characteristics to the problem in our getting started. \n",
    "Before a solution is evaluated, a repair function is called. To make sure a solution is feasible, an approach would be to either set $x_3 = 2 - x_1$ or $x_1 = 2 - x_3$. Additionally, we need to consider that this repair might produce a variable to be out of bounds."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pymoo.model.repair import Repair\n",
    "\n",
    "class MyRepair(Repair):\n",
    "\n",
    "    def _do(self, problem, pop, **kwargs):\n",
    "        for k in range(len(pop)):\n",
    "            x = pop[k].X\n",
    "            if np.random.random() < 0.5:\n",
    "                \n",
    "                x[2] = 2 - x[0]\n",
    "                if x[2] > 2:\n",
    "                    val = x[2] - 2\n",
    "                    x[0] += val\n",
    "                    x[2] -= val\n",
    "                    \n",
    "            else:\n",
    "                x[0] = 2 - x[2]\n",
    "                if x[0] > 2:\n",
    "                    val = x[0] - 2\n",
    "                    x[2] += val\n",
    "                    x[0] -= val\n",
    "                \n",
    "                \n",
    "        return pop"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now the algorithm object needs to be initialized with the repair operator and then can be run to solve the problem:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=====================================================================================\n",
      "n_gen |  n_eval |   cv (min)   |   cv (avg)   |  n_nds  |     eps      |  indicator  \n",
      "=====================================================================================\n",
      "    1 |     100 |  0.00000E+00 |  0.00000E+00 |       5 |            - |            -\n",
      "    2 |     200 |  0.00000E+00 |  0.00000E+00 |      11 |  0.055618092 |        ideal\n",
      "    3 |     300 |  0.00000E+00 |  0.00000E+00 |      17 |  0.025842665 |        ideal\n",
      "    4 |     400 |  0.00000E+00 |  0.00000E+00 |      26 |  0.016904647 |            f\n",
      "    5 |     500 |  0.00000E+00 |  0.00000E+00 |      40 |  0.033700365 |        nadir\n",
      "    6 |     600 |  0.00000E+00 |  0.00000E+00 |      52 |  0.074158937 |        nadir\n",
      "    7 |     700 |  0.00000E+00 |  0.00000E+00 |      72 |  0.004156081 |        nadir\n",
      "    8 |     800 |  0.00000E+00 |  0.00000E+00 |      93 |  0.002663388 |        nadir\n",
      "    9 |     900 |  0.00000E+00 |  0.00000E+00 |     100 |  0.066694097 |        nadir\n",
      "   10 |    1000 |  0.00000E+00 |  0.00000E+00 |     100 |  0.002154514 |            f\n",
      "   11 |    1100 |  0.00000E+00 |  0.00000E+00 |     100 |  0.034574202 |        nadir\n",
      "   12 |    1200 |  0.00000E+00 |  0.00000E+00 |     100 |  0.001283364 |            f\n",
      "   13 |    1300 |  0.00000E+00 |  0.00000E+00 |     100 |  0.003889728 |        nadir\n",
      "   14 |    1400 |  0.00000E+00 |  0.00000E+00 |     100 |  0.003870320 |        nadir\n",
      "   15 |    1500 |  0.00000E+00 |  0.00000E+00 |     100 |  0.001569638 |            f\n",
      "   16 |    1600 |  0.00000E+00 |  0.00000E+00 |     100 |  0.001456301 |            f\n",
      "   17 |    1700 |  0.00000E+00 |  0.00000E+00 |     100 |  0.001513338 |            f\n",
      "   18 |    1800 |  0.00000E+00 |  0.00000E+00 |     100 |  0.008379175 |        nadir\n",
      "   19 |    1900 |  0.00000E+00 |  0.00000E+00 |     100 |  0.001293048 |            f\n",
      "   20 |    2000 |  0.00000E+00 |  0.00000E+00 |     100 |  0.001524912 |            f\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<pymoo.visualization.scatter.Scatter at 0x7fc8948ee350>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 372,
       "width": 498
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.algorithms.nsga2 import NSGA2\n",
    "\n",
    "algorithm = NSGA2(pop_size=100, repair=MyRepair(), eliminate_duplicates=True)\n",
    "\n",
    "from pymoo.optimize import minimize\n",
    "from pymoo.visualization.scatter import Scatter\n",
    "\n",
    "res = minimize(MyProblem(),\n",
    "               algorithm,\n",
    "               ('n_gen', 20),\n",
    "               seed=1,\n",
    "               verbose=True)\n",
    "\n",
    "plot = Scatter()\n",
    "plot.add(res.F, color=\"red\")\n",
    "plot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In our case it is easy to verify if the constraint is violated or not:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2.\n",
      " 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2.\n",
      " 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2.\n",
      " 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2.\n",
      " 2. 2. 2. 2.]\n"
     ]
    }
   ],
   "source": [
    "print(res.X[:, 0] + res.X[:, 2])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If you would like to compare the solution without a repair you will see how searching only in the feasible space helps:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=====================================================================================\n",
      "n_gen |  n_eval |   cv (min)   |   cv (avg)   |  n_nds  |     eps      |  indicator  \n",
      "=====================================================================================\n",
      "    1 |     100 |  0.000035699 |  7.218880160 |       1 |            - |            -\n",
      "    2 |     200 |  0.000035699 |  0.937483763 |       1 |  0.00000E+00 |            f\n",
      "    3 |     300 |  0.000035699 |  0.098161741 |       1 |  0.00000E+00 |            f\n",
      "    4 |     400 |  0.00000E+00 |  0.024978835 |       1 |  3.360562566 |        ideal\n",
      "    5 |     500 |  0.00000E+00 |  0.007024606 |       1 |  0.00000E+00 |            f\n",
      "    6 |     600 |  0.00000E+00 |  0.001830226 |       1 |  0.00000E+00 |            f\n",
      "    7 |     700 |  0.00000E+00 |  0.000759620 |       2 |  1.000000000 |        ideal\n",
      "    8 |     800 |  0.00000E+00 |  0.000303923 |       2 |  0.00000E+00 |            f\n",
      "    9 |     900 |  0.00000E+00 |  0.000120410 |       2 |  0.00000E+00 |            f\n",
      "   10 |    1000 |  0.00000E+00 |  0.000059157 |       2 |  0.00000E+00 |            f\n",
      "   11 |    1100 |  0.00000E+00 |  0.000032714 |       2 |  0.00000E+00 |            f\n",
      "   12 |    1200 |  0.00000E+00 |  0.000018232 |       1 |  0.380979172 |        ideal\n",
      "   13 |    1300 |  0.00000E+00 |  8.48023E-06 |       1 |  0.00000E+00 |            f\n",
      "   14 |    1400 |  0.00000E+00 |  2.91638E-06 |       1 |  0.057548617 |        ideal\n",
      "   15 |    1500 |  0.00000E+00 |  2.67695E-07 |       1 |  0.00000E+00 |            f\n",
      "   16 |    1600 |  0.00000E+00 |  0.00000E+00 |       1 |  3.28659E+25 |            f\n",
      "   17 |    1700 |  0.00000E+00 |  0.00000E+00 |       1 |  0.00000E+00 |            f\n",
      "   18 |    1800 |  0.00000E+00 |  0.00000E+00 |       1 |  0.012175125 |        ideal\n",
      "   19 |    1900 |  0.00000E+00 |  0.00000E+00 |       2 |  0.00000E+00 |            f\n",
      "   20 |    2000 |  0.00000E+00 |  0.00000E+00 |       1 |  0.011813688 |        ideal\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<pymoo.visualization.scatter.Scatter at 0x7fc893dcd2d0>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 372,
       "width": 526
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "algorithm = NSGA2(pop_size=100, eliminate_duplicates=True)\n",
    "\n",
    "res = minimize(MyProblem(),\n",
    "               algorithm,\n",
    "               ('n_gen', 20),\n",
    "               seed=1,\n",
    "               verbose=True)\n",
    "\n",
    "plot = Scatter()\n",
    "plot.add(res.F, color=\"red\")\n",
    "plot.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.99716258]\n"
     ]
    }
   ],
   "source": [
    "print(res.X[:, 0] + res.X[:, 2])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here, in fact, the $\\epsilon$ term is necessary to find any feasible solution at all."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
